﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;
using System.ComponentModel;
using UtilityExtensions;

namespace BOL.UI
{
    public class GetUILocalizacionList
    {
        int _count;

        public int Count(int idProyecto ,int idEtapa, 
                                                           string localizacionStr,
                                                           int startRowIndex,
                                                           int maximumRows,
                                                           string sortExpression)
        {
            return _count;
        }

        public int Count(int idEtapa, int startRowIndex,
                                                          int maximumRows,
                                                          string sortExpression)
        {
            return _count;
        }

        private IQueryable<UILocalizacionListInfo> ApplySelect_EtapaListInfo()
        {
            var q = from a in DbUtil.Db.UILocalizacions
                    select new UILocalizacionListInfo
                    {
                        area=a.area,
                        comentario=a.comentario,
                        descripcion=a.descripcion,
                        etapaStr=a.Etapa.descripcion,
                           idEtapa=a.idEtapa,
                           idInternal=a.idInternal,
                           idProyecto=a.Etapa.idProyecto,
                           idEmpresa=a.Etapa.Proyecto.idEmpresa.Value,
                           totalPisoStr=string.Format("{0:N0}",a.UIBloques.Count),
                        areaStr=string.Format("{0:N}",a.area)
                        
                    };
            return q;
        }
        private IQueryable<UILocalizacionListInfo> ApplySort(IQueryable<UILocalizacionListInfo> q, string sortExpression)
        {
            switch (sortExpression)
            {
                case "descripcion":
                    q = q.OrderBy(b => b.descripcion);
                    break;
                case "descripcion DESC":
                    q = q.OrderByDescending(b => b.descripcion);
                    break;

                case "comentario":
                    q = q.OrderBy(b => b.comentario);
                    break;
                case "comentario DESC":
                    q = q.OrderByDescending(b => b.comentario);
                    break;

                case "area":
                    q = q.OrderBy(b => b.area);
                    break;
                case "area DESC":
                    q = q.OrderByDescending(b => b.area);
                    break;


                default:
                    q = q.OrderByDescending(b => b.idInternal).OrderByDescending(p => p.descripcion);
                    break;
            }
            return q;
        }



        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<UILocalizacionListInfo> Execute(int idProyecto,
                                                            int idEtapa,
                                                            string localizacionStr,
                                                            int startRowIndex,
                                                           int maximumRows,
                                                           string sortExpression)
        {
            if (!localizacionStr.HasValue())
                localizacionStr = "";
            
            var q = ApplySelect_EtapaListInfo();

            //int idEmpresa = (int)System.Web.HttpContext.Current.Session["login.Empresa.idEmpresa"];


            q = q.Where(a => a.descripcion.Contains(localizacionStr) 
                & (idEtapa!=0)?a.idEtapa==idEtapa:a.idEtapa!=idEtapa
                & a.idProyecto == idProyecto
                );
                             



            _count = q.Count();

            q = ApplySort(q, sortExpression);
            return q.Skip(startRowIndex).Take(maximumRows);
        }


        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<UILocalizacionListInfo> Execute(int idEtapa,
                                                           int startRowIndex,
                                                           int maximumRows,
                                                           string sortExpression)
        {
         
            var q = ApplySelect_EtapaListInfo();

            


            q = q.Where(a => 
                 (idEtapa != 0) ? a.idEtapa == idEtapa : a.idEtapa != idEtapa
                
                );




            _count = q.Count();

            q = ApplySort(q, sortExpression);
            return q.Skip(startRowIndex).Take(maximumRows);
        }

     

    }
}
